#!/usr/bin/env python3
"""
数据库初始化脚本
创建MySQL数据库和表结构
"""

import pymysql
import os
from sqlalchemy import create_engine
from models import Base, DATABASE_URL

def create_database():
    """创建MySQL数据库"""
    # 从DATABASE_URL解析数据库信息
    # 格式: mysql+pymysql://username:password@host:port/database
    db_url = DATABASE_URL.replace("mysql+pymysql://", "")
    parts = db_url.split("@")
    user_pass = parts[0].split(":")
    host_port_db = parts[1].split("/")
    host_port = host_port_db[0].split(":")
    
    username = user_pass[0]
    password = user_pass[1]
    host = host_port[0]
    port = int(host_port[1]) if len(host_port) > 1 else 3306
    database = host_port_db[1]
    
    print(f"正在创建数据库: {database}")
    print(f"主机: {host}:{port}")
    print(f"用户: {username}")
    
    try:
        # 连接MySQL服务器（不指定数据库）
        connection = pymysql.connect(
            host=host,
            port=port,
            user=username,
            password=password,
            charset='utf8mb4'
        )
        
        with connection.cursor() as cursor:
            # 创建数据库
            cursor.execute(f"CREATE DATABASE IF NOT EXISTS {database} CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci")
            print(f"数据库 {database} 创建成功")
            
        connection.close()
        
    except Exception as e:
        print(f"创建数据库失败: {e}")
        return False
    
    return True

def create_tables():
    """创建数据表"""
    print("正在创建数据表...")
    
    try:
        # 创建数据库引擎
        engine = create_engine(DATABASE_URL, echo=True)
        
        # 创建所有表
        Base.metadata.create_all(bind=engine)
        print("数据表创建成功")
        
    except Exception as e:
        print(f"创建数据表失败: {e}")
        return False
    
    return True

def main():
    """主函数"""
    print("=== 趣享生活数据库初始化 ===")
    
    # 创建数据库
    if not create_database():
        print("数据库创建失败，请检查MySQL连接配置")
        return
    
    # 创建表
    if not create_tables():
        print("数据表创建失败")
        return
    
    print("=== 数据库初始化完成 ===")
    print("可以开始运行应用了！")

if __name__ == "__main__":
    main()
